【Tips】CloudFormationでDependOnが必要なケース
はじめに
こんにちは。
くコ:彡がトレードマークの阿部です。
CloudFormationでDependOnが必要なケースをご紹介します。
CloudFormationの依存関係
CloudFormationで作成するリソースの構築順は、依存関係に基づき、CloudFormationが自動的に判断します。
例えば、VPCとEC2のテンプレートでCreate Stackした場合、VPCやサブネットが正しく作られてから、EC2が構築されます。
CloudFormationテンプレートを作成するにあたり、ユーザーが依存関係を意識することは"基本的に"ありません。
仮想プライベートゲートウェイとルート伝達の作成は例外の1つです。
ルート伝達の有効化
ルート伝達を有効化するには、AWS::EC2::VPNGatewayRoutePropagation リソースを使います。
VPNGatewayRoutePropagation リソースは、仮想プライベートゲートウェイがVPCにアタッチされるまで、ゲートウェイを利用することが出来ません。
この依存関係は、DependsOn 属性で明示的に示す必要があります。
DependsOn 属性では、VPNGatewayAttachment を指定します。
これにより、ルート伝達は仮想プライベートゲートウェイのアタッチ後に作成されます。
DependOn 属性がない場合、Create Stackに失敗します。
"RoutePropagation": { "Type": "AWS::EC2::VPNGatewayRoutePropagation", "DependsOn": "VPNGatewayAttachment", "Properties": { "RouteTableIds": [ { "Ref": "RouteTableID" } ], "VpnGatewayId": { "Ref": "VPNGateway" } } }
サンプルテンプレート
検証に利用したテンプレートを置いておきました。
テンプレートでは、仮想プライベートゲートウェイを作成し、指定したルートテーブルのルート伝達を有効化します。
よろしければ、参考にして下さい。
その他のDependOnが必要なケース
DependsOn 属性が必要になるケースは、AWS CloudFormation ユーザーガイドにまとめられています。
参考
- AWS CloudFormation ユーザーガイド - DependsOn 属性
- AWS CloudFormation ユーザーガイド - AWS::EC2::VPNGatewayRoutePropagation
おわりに
CloudFormationテンプレートを作るにあたり、依存関係を意識する事はほとんどありません。
仮想プライベートゲートウェイとルート伝達の作成は例外の1つであり、DependsOn 属性が必要になります。
Create Stackに失敗した時に思い出して頂ければ嬉しいです。